﻿using System;
using System.IO;
using System.Data;
using System.Windows;
using System.Collections;
using System.Windows.Input;
using System.ComponentModel;
using System.Windows.Controls;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Controls;
using Sinacor.UI.Bovespa.Corretagem.Model;
using Sinacor.UI.Bovespa.Corretagem.Presenter;
using Sinacor.Infra.UI.Controls.SmartClient;
using System.Collections.Generic;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;

namespace Sinacor.UI.Bovespa.Corretagem.View.SmartClient
{
    public partial class CadastroTipoAplicacaoCorretagem : SinacorWindow, ITipoAplicacaoCorretagem
    {
        public Presenter.TipoAplicacaoCorretagem PresenterTipoAplicacaoCorretagem { get; set; }
        
        public Model.TipoAplicacaoCorretagem CurrentModel
        {
            get 
            {
                if (this.dtgCorretagem.GetInsertionRow().IsInserting)
                    return (Model.TipoAplicacaoCorretagem)this.dtgCorretagem.GetInsertionRow().Item;
                else
                    return null;
            }
        }

        public CadastroTipoAplicacaoCorretagem()
        {
            InitializeComponent();

            PresenterTipoAplicacaoCorretagem = new Presenter.TipoAplicacaoCorretagem(this);

            DataContext = PresenterTipoAplicacaoCorretagem;

            dtgCorretagem.NewItemType = typeof(Model.TipoAplicacaoCorretagem);

            AfterInitialize += new RoutedEventHandler(Inicializar);
        }

        private void Inicializar(object sender, RoutedEventArgs e)
        {
            PresenterTipoAplicacaoCorretagem.Inicializar();
        }

        #region ITipoAplicacaoCorretagem Members

        public void AtualizarTiposAplicacoesCorretagem()
        {
            this.dtgCorretagem.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public bool ConfirmarExclusao()
        {
            bool isExclui = false;

            SinacorMessageBoxResult result = SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.ConfirmaExclusaoTipoAplicacaoCorretagem").ToString(), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question);

            if (result == SinacorMessageBoxResult.Yes)
            {
                isExclui = true;
            }

            return isExclui;
        }

        public void InformarAlteracaoRealizada()
        {
            SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.AlteracaoRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        public void InformarExclusaoRealizada()
        {
            SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.ExclusaoRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        public void InformarInclusaoRealizada()
        {
            SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.InclusaoRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        public void InformarSelecaoItemObrigatoria()
        {
            SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.Message.SelecaoItemObrigatorio").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        #endregion

        private void dtgCorretagem_EndingInsert(object sender, CancelItemEventArgs e)
        {
            bool cancel = false;

            if (e.OriginalSource is BaseRow)
            {
                if (this.CurrentModel.TipoBaseCalculo == null)
                {
                    SinacorMessageBox.Show(FindResource("Bovespa.Corretagem.ExceptionMessage.TipoBaseCalculoObritatorio").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Error);
                    cancel = true;
                }
                else
                {
                    this.ClearServiceErrors();
                    cancel = !this.PresenterTipoAplicacaoCorretagem.IncluirTipoAplicacaoCorretagem(this.CurrentModel);
                }

                e.Cancel = cancel;
                e.Handled = cancel;
            }
        }

        private void dtgCorretagem_EndingUpdate(object sender, CancelItemEventArgs e)
        {
            bool cancel = false;

            if (e.OriginalSource is BaseRow)
            {
                this.ClearServiceErrors();

                cancel = !this.PresenterTipoAplicacaoCorretagem.AlterarTipoAplicacaoCorretagem(e.ItemInfo.Item as Model.TipoAplicacaoCorretagem);

                e.Cancel = cancel;
                e.Handled = cancel;
            }
        }

        private void dtgCorretagem_Deleting(object sender, CancelItemsEventArgs e)
        {
            bool cancel = false;

            this.ClearServiceErrors();

            cancel = !this.PresenterTipoAplicacaoCorretagem.ExcluirTipoAplicacaoCorretagem(this.dtgCorretagem.SelectedItem as Model.TipoAplicacaoCorretagem);

            e.Cancel = cancel;
            e.Handled = cancel;
        }

        private void dtgCorretagem_CancelingInsert(object sender, CancelItemEventArgs e)
        {
            this.ClearServiceErrors();
        }

        private void dtgCorretagem_CancelingUpdate(object sender, CancelItemEventArgs e)
        {
            this.ClearServiceErrors();
        }
    }
}
